package atom.core0.util;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
/**
 * <p>Title: 金额处理</p>
 * <p>Description:</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * @author hike_man
 * @version 1.0
 */
public class MoneyUtil {

	/**
	 * 获取对应于amount的以元为单位的字符串，截尾数采用四舍五入
	 * @param amount 以元为单位
	 * @return
	 */
	public static String getYuanString(BigDecimal amount){
		return amount.setScale(2,BigDecimal.ROUND_HALF_EVEN).toString();
	}
	/**
	 * 获取对应于amount的以元为单位的字符串，截尾数采用四舍五入
	 * @param amount 以元为单位
	 * @return
	 */
	public static String getYuanString(double amount){
		BigDecimal bd = new BigDecimal(amount);
		return bd.setScale(2,BigDecimal.ROUND_HALF_EVEN).toString();
	}	
	/**
	 * 获取对应于amount的以分为单位的字符串，截尾数采用四舍五入
	 * @param amount 以元为单位
	 * @return
	 */
	public static String getFenString(BigDecimal amount){
		String yuan = getYuanString(amount);
		StringBuffer sb = new StringBuffer(getYuanString(amount));
		int dotIndex = yuan.indexOf(".");
		sb.replace(dotIndex,dotIndex+1,"");
		return sb.toString();
	}
	
	/**
	 * 根据以分为单位的字符串，构造以元为单位的BigDecimal
	 * @param fen
	 * @return
	 */
	public static BigDecimal getBigDecimalFromFen(String fen){
		return new BigDecimal(fen).divide(new BigDecimal(100),BigDecimal.ROUND_HALF_EVEN);
	}
	
	/**
	 * 获取金额的格式化字符串，格式为：xx,xxx,xxx.xx
	 * @param d
	 * @return
	 */
	public static String getFormatStr(Double d)
	{
		return NumberFormat.getCurrencyInstance().format(d).replaceAll("￥", "");
	}
	public static String formatAmount(double amount) {
		return new DecimalFormat(",##0.00").format(amount);
	}
	/**
	 * 获取金额的格式化字符串，格式为：xxxxxxxx.xx
	 * @param d
	 * @return
	 */
	public static String getPlainStr(Double d)
	{
		return getFormatStr(d).replaceAll(",", "");
	}
	
	/**
	 * 判断字符串是否是合法的金额，格式为：xxxxxxxx.xx
	 * @param realValue
	 * @return
	 */
	public static boolean isValidMoney(String realValue) {
		try {
			String[] values = realValue.split("[.]");
			int valuesLen = values.length;
			if (valuesLen > 1 && values[valuesLen - 1].length() > 2) // 如果小数点后位数超过两位
			{
				return false;
			}
			Double d = new Double(Double.parseDouble(realValue));
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}	
	//10.04会浮点 要求amount是二位小数的，不能是三位小数。因为增加了0.001元，防止向下浮点
	public static int getFenInt(double amount){
		amount = amount*100 +0.1;
		int fen = (int)amount;
		return fen;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		//System.out.println(MoneyUtil.getFenString(new BigDecimal(12.09)));
		System.out.println(MoneyUtil.isValidMoney("11111.11"));

	}
	
	
}
